博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP:Cookie实现永久登录(书本案例)
阅读量:5102 次
发布时间:2019-06-13

本文共 2896 字,大约阅读时间需要 9 分钟。

loginCookie.jsp

<%@ page language="java" pageEncoding="UTF-8" isErrorPage="false" %>
<%! // 密钥 private static final String KEY = ":cookie@helloweenvsfei.com"; // MD5 加密算法 public final static String calcMD5(String ss) { String s = ss==null ? "" : ss; char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; try { byte[] strTemp = s.getBytes(); MessageDigest mdTemp = MessageDigest.getInstance("MD5"); mdTemp.update(strTemp); byte[] md = mdTemp.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } }%><% request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); String action = request.getParameter("action"); if("login".equals(action)){ String account = request.getParameter("account"); String password = request.getParameter("password"); int timeout = new Integer(request.getParameter("timeout")); // 把帐号连同密钥使用MD5后加密后保存 String ssid = calcMD5(account + KEY); // 把帐号保存到Cookie中 并控制有效期 Cookie accountCookie = new Cookie("account", account); accountCookie.setMaxAge(timeout); // 把加密结果保存到Cookie中 并控制有效期 Cookie ssidCookie = new Cookie("ssid", ssid); ssidCookie.setMaxAge(timeout); response.addCookie(accountCookie); response.addCookie(ssidCookie); // 重新请求本页面 response.sendRedirect(request.getRequestURI() + "?" + System.currentTimeMillis()); return; } else if("logout".equals(action)){ // 删除Cookie中的帐号 Cookie accountCookie = new Cookie("account", ""); accountCookie.setMaxAge(0); // 删除Cookie中的加密结果 Cookie ssidCookie = new Cookie("ssid", ""); ssidCookie.setMaxAge(0); response.addCookie(accountCookie); response.addCookie(ssidCookie); // 重新请求本页面 response.sendRedirect(request.getRequestURI() + "?" + System.currentTimeMillis()); return; } boolean loggin = false; String account = null; String ssid = null; // 获取Cookie中的account与ssid if(request.getCookies() != null){ for(Cookie cookie : request.getCookies()){ if(cookie.getName().equals("account")) account = cookie.getValue(); if(cookie.getName().equals("ssid")) ssid = cookie.getValue(); } } if(account != null && ssid != null){ // 如果加密规则正确, 则视为已经登录 loggin = ssid.equals(calcMD5(account + KEY)); } %><%= loggin ? "欢迎您回来" : "请先登录" %>
当前有效的 Cookie
<%= loggin ? "欢迎您回来" : "请先登录" %> <% if(loggin){ %> 欢迎您, ${ cookie.account.value }.   
注销 <% } else { %>
帐号:
密码:
有效期: 关闭浏览器即失效
30天内有效
永久有效
<% } %>

转载于:https://www.cnblogs.com/xieyuan/p/3787368.html

你可能感兴趣的文章
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
OracleOraDb11g_home1TNSListener服务启动后停止,某些服务在未由其他服务或程序使用时将自己主动停止...
查看>>
Redis用户添加、分页、登录、注册、加关注案例
查看>>
练习2
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
StringBuffer是字符串缓冲区
查看>>
hihocoder1187 Divisors
查看>>
java入门
查看>>
Spring 整合 Redis
查看>>